package com.shujia.wyh.day27.network.udpcoding;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/*
        UDP接收端代码步骤：
            1、创建接收端的Socket对象
            2、创建一个数据包（用来接收数据的容器）
            3、调用Socket对象中一个方法接收数据
            4、解析数据包，打印在控制台上
            5、释放资源

       注意：接收端不能重复启动
 */
public class ReceiveDemo1 {
    public static void main(String[] args) throws Exception {
        //1、创建接收端的Socket对象
        //DatagramSocket(int port)
        //构造数据报套接字并将其绑定到本地主机上的指定端口。
        DatagramSocket ds = new DatagramSocket(10086);

        //2、创建一个数据包（用来接收数据的容器）
        //DatagramPacket(byte[] buf, int length)
        //构造一个 DatagramPacket用于接收长度的数据包 length 。
        byte[] bytes = new byte[1024];
        int length = bytes.length;
        DatagramPacket dp = new DatagramPacket(bytes, length);

        //3、调用Socket对象中一个方法接收数据
        //void receive(DatagramPacket p)
        //从此套接字接收数据报包
        ds.receive(dp); //阻塞式方法

        InetAddress address = dp.getAddress();
        String ip = address.getHostAddress();
        String hostName = address.getHostName();


        //4、解析数据包，打印在控制台上
        //byte[] getData()
        //返回数据缓冲区。
        byte[] data = dp.getData();
        int length1 = dp.getLength(); //获取实际的数据长度
        String s = new String(data, 0, length1);
        System.out.println(hostName + ",ip地址为：" + ip + "发送的内容为：" + s);


        //释放资源
        ds.close();
    }
}
